#include <stdio.h>
#include <string.h>

// 辅助函数：将字符转换为数值
int charToValue(char c) {
    if (c >= '0' && c <= '9') {
        return c - '0';
    } else if (c >= 'A' && c <= 'F') {
        return c - 'A' + 10;
    } else if (c >= 'a' && c <= 'f') {
        return c - 'a' + 10;
    } else {
        // 处理非法字符
        printf("Invalid character: %c", c);
        return -1;
    }
}

// KToD函数：将k进制数转换为10进制
int KToD(const char number[], int k) {
    int length = strlen(number);
    int decimal = 0;

    for (int i = 0; i < length; i++) {
        int digit = charToValue(number[i]);
        if (digit == -1 || digit >= k) {
            printf("Invalid digit for base %d: %c", k, number[i]);
            return -1; // 非法输入
        }
        decimal = decimal * k + digit; // 使用累加的方式计算十进制值
    }

    return decimal;
}

int main() {
    char number[] = "1A3F";
    int k = 16;
    int decimal = KToD(number, k);

    if (decimal != -1) {
        printf("The decimal value of %s in base %d is: %d", number, k, decimal);
    } else {
        printf("Conversion failed due to invalid input.");
    }

    return 0;
}
